package com.other.dispatchEvent;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;

import com.base.tool.log.Tags;

/**
 * 通过查看view的源码，发现view只有dispatchTouchEvent，OnTouchEvent
 * 通过查看Viewgroup的源码，发现viewgroup不仅有dispatchTouchEvent，OnTouchEvent，还有onInterceptTouchEvent
 * <p>
 * dispatchTouchEvent：方法用于事件的分发，Android中的所有事件都必须经过此方法的分发，然后决定是自身消费当前事件还是继续向下分发给 视图处理。
 * 返回true表示不在继续分发，事件被消费了。返回false则事件继续分发，
 * 如果是viewgroup则分发给onInterceptTouchEvent进行判断是否拦截
 * <p>
 * <p>
 * OnTouchEvent：方法用于事件的处理，返回true表示消费处理当前事件，返回false则不处理，交给子控件进行继续分发。
 * <p>
 * <p>
 * onInterceptTouchEvent：是ViewGroup中才有的方法，View中没有，它的作用是负责事件的拦截，
 * 返回true的时候表示拦截当前事件，不继续往下分发，交给自身的onTouchEvent进行处理。
 * 返回false则不拦截，继续往下传。
 * 这是ViewGroup特有的方法，因为ViewGroup中可能还有子View，而在Android中View中是不能再包含子View的
 */

public class MyButton extends androidx.appcompat.widget.AppCompatButton {

    public static final String TAG = Tags.myButton;

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        Log.e(TAG, "dispatchTouchEvent begin " + "hashcode=" + this.hashCode() + " " + UtilMotionEvent.show(event));

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
//                return true;//不再往下分发
                break;

            case MotionEvent.ACTION_MOVE:
                break;

            case MotionEvent.ACTION_UP:
                break;

        }
//        true表示不再继续分发，事件被消费了。返回false则事件继续分发
        boolean result = super.dispatchTouchEvent(event);
        Log.e(TAG, "dispatchTouchEvent end " + " hashcode=" + this.hashCode() + " " + (result ? "不再继续分发" : "事件继续分发") + " " + UtilMotionEvent.show(event));

        return result;


    }

    @Override

    public boolean onTouchEvent(MotionEvent event) {
        Log.e(TAG, "onTouchEvent begin " + " hashcode=" + this.hashCode() + " " + UtilMotionEvent.show(event));

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                break;

            case MotionEvent.ACTION_MOVE:
                break;

            case MotionEvent.ACTION_UP:
                break;

        }

        boolean result = super.onTouchEvent(event);
        Log.e(TAG, "onTouchEvent end" + " hashcode=" + this.hashCode() + " " + (result ? "事件已经消费" : "事件没消费") + " " + UtilMotionEvent.show(event));

        return result;
    }


}
